package com.hzchendou.blog.code.chapter02.example02;

/**
 * Singleton单例模式
 *
 * @Date: 2022-07-11 14:49
 * @since: 1.0
 */
public class Example02_1 {

    /// 设置为静态变量，类成员变量
    private static Example02_1 instance = null;

    /// 设置为私有构造函数，防止外部调用
    private Example02_1() {
    }

    /**
     * 使用类成员变量存储实例对象，在单线程情况下可以实现只创建一个实例， 但是在多线成情况下，存在创建多个实例的风险
     *
     * @return
     */
    public static Example02_1 getInstance() {
        if (instance == null) {
            instance = new Example02_1();
        }
        return instance;
    }

    /**
     * 用于处理在多线情况下的线程安全问题，使用同步锁实现线程安全访问
     *
     * @return
     */
    public static synchronized Example02_1 getInstanceSync() {
        return getInstance();
    }
}
